#include <bits/stdc++.h>
using namespace std;
using ll = long long;

int main() {
  int n;
  cin >> n;
  set<ll> st = {0}; // 使用set来维护已插入的有序位置，初始包含0
  ll ans = 1e18;    // 维护所有位置到其最近邻居的最小距离之和

  // mi[x] 表示位置x到其最近邻居的最小距离
  map<ll, ll> mi;
  mi[0] = 1e18; // 初始位置0没有邻居，设为极大值

  for (int i = 1; i <= n; i++) {
    ll x;
    cin >> x;

    // 在有序集合中找到x的插入位置
    auto nxt = st.lower_bound(x); // 第一个大于等于x的位置
    auto lst = prev(nxt);         // 前一个位置（小于x的最大值）

    mi[x] = 1e18; // 初始化新位置的最小距离为极大值

    // 处理右侧邻居（如果存在）
    if (nxt != st.end()) {
      // 更新右侧邻居的最小距离
      ans -= mi[*nxt];                    // 先减去原来的距离值
      mi[*nxt] = min(mi[*nxt], *nxt - x); // 更新为到新位置x的距离（如果更小）
      ans += mi[*nxt];                    // 加上更新后的距离值

      // 同时更新新位置x到右侧邻居的距离
      mi[x] = min(mi[x], *nxt - x);
    }

    // 处理左侧邻居（如果存在）
    if (nxt != st.begin()) {
      // 更新左侧邻居的最小距离
      ans -= mi[*lst];                    // 先减去原来的距离值
      mi[*lst] = min(mi[*lst], x - *lst); // 更新为到新位置x的距离（如果更小）
      ans += mi[*lst];                    // 加上更新后的距离值

      // 同时更新新位置x到左侧邻居的距离
      mi[x] = min(mi[x], x - *lst);
    }

    st.insert(x);        // 将新位置插入集合
    ans += mi[x];        // 加上新位置的最小距离
    cout << ans << endl; // 输出当前的最小距离和
  }
}